package com.emspost.utils;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * 时间计算工具类
 */
public class TimeUtils {

    /**
     * 获取当前时间减去指定分钟数后的时间（默认系统时区）
     * @param minutes 要减去的分钟数（支持负数）
     * @return LocalDateTime 对象
     */
    public static LocalDateTime minusMinutes(int minutes) {
        return minusMinutes(minutes, ZoneId.systemDefault());
    }

    /**
     * 获取当前时间减去指定分钟数后的时间（指定时区）
     * @param minutes 要减去的分钟数（支持负数）
     * @param zone 时区
     * @return LocalDateTime 对象
     */
    public static LocalDateTime minusMinutes(int minutes, ZoneId zone) {
        return LocalDateTime.now(zone).minusMinutes(minutes);
    }

    /**
     * 获取当前时间减去指定分钟数后的时间（返回Date对象）
     * @param minutes 要减去的分钟数
     * @return Date 对象
     */
    public static Date minusMinutesAsDate(int minutes) {
        return Date.from(minusMinutes(minutes)
                .atZone(ZoneId.systemDefault())
                .toInstant());
    }

    /**
     * 获取格式化的时间字符串
     * @param minutes 要减去的分钟数
     * @param pattern 时间格式（如：yyyy-MM-dd HH:mm:ss）
     * @return 格式化后的时间字符串
     */
    public static String minusMinutesFormatted(int minutes, String pattern) {
        return minusMinutesFormatted(minutes, pattern, ZoneId.systemDefault());
    }

    /**
     * 获取格式化的时间字符串（指定时区）
     * @param minutes 要减去的分钟数
     * @param pattern 时间格式
     * @param zone 时区
     * @return 格式化后的时间字符串
     */
    public static String minusMinutesFormatted(int minutes, String pattern, ZoneId zone) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
        return minusMinutes(minutes, zone).format(formatter);
    }

    // 使用示例
    public static void main(String[] args) {
        // 示例1：获取30分钟前的日期时间对象
        LocalDateTime halfHourAgo = TimeUtils.minusMinutes(30);
        System.out.println("30分钟前时间: " + halfHourAgo);

        // 示例2：获取纽约时区1小时前的时间
        LocalDateTime nyTime = TimeUtils.minusMinutes(60, ZoneId.of("America/New_York"));
        System.out.println("纽约时区1小时前: " + nyTime);

        // 示例3：获取格式化的时间字符串
        String formattedTime = TimeUtils.minusMinutesFormatted(45, "yyyy-MM-dd HH:mm:ss");
        System.out.println("45分钟前格式化时间: " + formattedTime);

        // 示例4：获取Date对象
        Date date = TimeUtils.minusMinutesAsDate(15);
        System.out.println("15分钟前Date对象: " + date);
    }
}